package com.koron.sinoprobe.web.ledger.mapper;


import com.koron.sinoprobe.web.ledger.bean.entity.SpProject;
import com.koron.sinoprobe.web.ledger.bean.query.SpProjectDeviceQuery;
import com.koron.sinoprobe.web.ledger.bean.query.SpProjectQuery;
import com.koron.sinoprobe.web.ledger.bean.query.SpStatisticsQuery;
import com.koron.sinoprobe.web.ledger.bean.vo.KeyValue;
import com.koron.sinoprobe.web.ledger.bean.vo.SpProjectVO;
import com.koron.sinoprobe.web.ledger.bean.vo.SpTotal;
import com.koron.sinoprobe.web.plan.bean.entity.SpMember;
import com.koron.sinoprobe.web.plan.bean.entity.SpPlanMilestone;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface SpProjectMapper {

    /**
     * 查询单个简单实例
     * @param id 主键
     * @return 简单实例
     */
    SpProject queryById(String id);

    /**
     * 查询单个详情实例
     * @param id 主键
     * @return 详情
     */
    SpProjectVO queryDetailById(String id);

    /**
     * 根据条件，查询类表
     * @param query 查询条件
     * @return
     */
    List<SpProjectVO> queryList(SpProjectQuery query);

    /**
     * 新增/修改数据
     * @param bean 实例对象
     * @return 影响行数
     */
    int saveOrUpdate(SpProject bean);

    int saveOrUpdateBatch(@Param("entities") List<SpProject> list);

    /**
     * 通过主键删除数据
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(String id);

    int deleteByPlanId(String planId);

    int hiddenById(String id);

    /**
     * 获取水司专项项目的所有主办部门
     * @return
     */
    List<String> getProjectDept();

    List<SpProject> getProjectGroupDept();

    /**
     * @param year 年份
     * @param hostDeptId 主办部门id
     * @return
     */
    List<KeyValue> getProjectOverview(@Param("year") Integer year, @Param("hostDeptId") String hostDeptId);

    /**
     *
     * @param year 年份
     * @param hostDeptId 主办部门id
     * @param projectType 项目类别
     * @return
     */
    List<SpProjectVO> getProjectProgress(@Param("year") Integer year, @Param("hostDeptId") String hostDeptId, @Param("projectType") String projectType);

    /**
     * 获取项目台账的项目关联对应专项工程数据的次数
     */
    Integer selectProjectRef(@Param("projectId") String projectId, @Param("tableName") String tableName);

    List<SpProjectVO> listProjectRef(@Param("projectId") List<String> projectId, @Param("tableName") String tableName);

    List<SpTotal> listSpTotal(SpStatisticsQuery query);

    List<SpProjectDeviceQuery> countByDeviceIds(@Param("query") List<SpProjectDeviceQuery> query);

    boolean update(SpProject spProject);

    List<SpPlanMilestone> selectMilestone(@Param("spId") String spId, @Param("sqlState") String sqlState);
    List<SpMember> selectMember(@Param("spId") String spId);
}

